package org.longteng.mobileluck.algorithm.dao.impl;

import lombok.extern.slf4j.Slf4j;
import org.longteng.mobileluck.algorithm.bean.MobileNumAuspiciousTable;
import org.longteng.mobileluck.algorithm.dao.MobileNumAuspiciousDao;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;


/**
 * 机号码吉祥如意表数据读入csv实现
 * @author hymn.com
 */
@Slf4j
@Service("mobileNumAuspiciousTable")
public class MobileNumAuspiciousDaoImpl extends ParserCsvBaseDao implements MobileNumAuspiciousDao{
    /**手机号码吉祥如意表*/
    private final Map<Integer, MobileNumAuspiciousTable> mobileNumAuspiciousMap;

    /**
     * 构造是读入csv手机号码吉祥如意表
     */
    public MobileNumAuspiciousDaoImpl() {
        List<MobileNumAuspiciousTable> mobileNumAuspiciousList = this.readTableCsv("/table/mobilenum_auspicious.csv");
        if (mobileNumAuspiciousList == null) {
            log.warn("读入csv手机号码吉祥如意表为空无法初始化手机号码吉祥如意表映射。");
            mobileNumAuspiciousList = new ArrayList<>();
        }

        this.mobileNumAuspiciousMap = mobileNumAuspiciousList.stream().collect(Collectors.toMap(MobileNumAuspiciousTable::getMobileNum, Function.identity(), (key1, key2) -> key2));

        // 如果得数刚好是整数，小数部分为“0”，则此人拥有非常人的能力，能够跳出三界外，不在五行中，这样散仙级的人物，自然是：经常处于戒备状态，对任何事都没法放松处理，孤僻性情难以交朋结友。对于爱情，就更加会慎重处理。任何人必须经过你长期观察及通过连番考验，方会减除戒备与你交往。
        MobileNumAuspiciousTable mobileNumAuspiciousTable = new MobileNumAuspiciousTable();
        mobileNumAuspiciousTable.setMobileNum(0);
        mobileNumAuspiciousTable.setMeaning("拥有非常人的能力，能够跳出三界外，不在五行中");
        mobileNumAuspiciousTable.setLuckStatus("大吉");
        this.mobileNumAuspiciousMap.put(0, mobileNumAuspiciousTable);
        if (log.isDebugEnabled()) {
            log.debug("读入csv手机号码吉祥如意表:\n ->{}", mobileNumAuspiciousMap);
        }
    }

    /**
     * 根据手机计算号取，吉祥如意表信息
     *
     * @param mobileNum
     * @return
     */
    @Override
    public MobileNumAuspiciousTable getAuspiciousEntity(int mobileNum) {
        return this.mobileNumAuspiciousMap.get(mobileNum);
    }

    /**
     * 获取泛型T的类型 T.class
     *
     * @return
     */
    @Override
    public Class getTClass() {
        return MobileNumAuspiciousTable.class;
    }
}
